const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

/**
 * 学生成绩分析函数
 * @param {number[]} scores - 学生成绩数组
 * @returns {Object} 包含所有分析结果的对象
 * @throws {Error} 输入无效时抛出错误
 */
function analyzeGrades(scores) {
    // 1. 输入验证
    if (!Array.isArray(scores)) {
        throw new Error('输入必须是数组');
    }
    if (scores.length === 0) {
        throw new Error('成绩数组不能为空');
    }
    for (const score of scores) {
        if (typeof score !== 'number' || isNaN(score) || !isFinite(score)) {
            throw new Error(`成绩 "${score}" 不是有效的数字`);
        }
        if (score < 0 || score > 100) {
            throw new Error(`成绩 "${score}" 必须在 0-100 之间`);
        }
    }

    const total = scores.length;

    // 2. 计算平均分（保留两位小数）
    let sum = 0;
    for (const score of scores) {
        sum += score;
    }
    const average = Number((sum / total).toFixed(2));

    // 3. 寻找最高分和最低分
    let max = scores[0];
    let min = scores[0];
    for (const score of scores) {
        if (score > max) max = score;
        if (score < min) min = score;
    }

    // 4. 计算及格率（保留两位小数，百分比形式）
    const passCount = scores.filter(score => score >= 60).length;
    const passRate = ((passCount / total) * 100).toFixed(2) + '%';

    // 5. 统计分数段分布
    const distribution = {
        '90-100': { count: 0, percentage: '0.00%' },
        '80-89': { count: 0, percentage: '0.00%' },
        '70-79': { count: 0, percentage: '0.00%' },
        '60-69': { count: 0, percentage: '0.00%' },
        '0-59': { count: 0, percentage: '0.00%' }
    };

    // 统计各分数段人数
    for (const score of scores) {
        if (score >= 90) {
            distribution['90-100'].count++;
        } else if (score >= 80) {
            distribution['80-89'].count++;
        } else if (score >= 70) {
            distribution['70-79'].count++;
        } else if (score >= 60) {
            distribution['60-69'].count++;
        } else {
            distribution['0-59'].count++;
        }
    }

    // 计算各分数段百分比
    for (const key in distribution) {
        const percentage = ((distribution[key].count / total) * 100).toFixed(2) + '%';
        distribution[key].percentage = percentage;
    }

    // 6. 返回结果对象
    return {
        total,
        average,
        max,
        min,
        passRate,
        distribution
    };
}

// 输入处理逻辑（支持逗号、空格、逗号+空格作为分隔符）
rl.on('line', (input) => {
    try {
        // 步骤1：去除输入两端空格，判断是否为空
        const trimmedInput = input.trim();
        if (trimmedInput === '') {
            throw new Error('输入不能为空，请输入有效的成绩');
        }

        // 步骤2：解析输入（支持3种格式：数组字面量、逗号分隔、空格分隔、混合分隔）
        let scoresArray;
        if (trimmedInput.startsWith('[') && trimmedInput.endsWith(']')) {
            // 处理数组字面量输入（如 [85, 92, 78] 或 [85 92 78]）
            // 先将数组内的空格替换为逗号，再解析JSON
            const formattedInput = trimmedInput.replace(/\s+/g, ',');
            scoresArray = JSON.parse(formattedInput);
        } else {
            // 处理普通输入：用正则表达式分割（匹配逗号、空格、逗号+空格）
            // \s+ 匹配1个或多个空格，, 匹配逗号，用 | 表示"或"，最终分割所有分隔符
            scoresArray = trimmedInput.split(/,\s*|\s+/).map(item => {
                const num = Number(item.trim());
                if (isNaN(num)) throw new Error(`无效的成绩值: "${item}"`);
                return num;
            });
        }

        // 调用分析函数
        const result = analyzeGrades(scoresArray);
        console.dir(result, { depth: null }); // depth: null 确保嵌套对象完整打印
    } catch (error) {
        console.error('错误:', error.message);
    } finally {
        rl.close();
    }
});